package offer2

import (
	"sort"
	"strconv"
	"strings"
)

/**
原题链接:
https://leetcode.cn/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/description/

剑指 Offer 45. 把数组排成最小的数
输入一个非负整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个。

示例 1:
输入: [10,2]
输出: "102"
*/

func minNumber(nums []int) string {

	if nums == nil || len(nums) == 0 { //如果数组为nil或者长度为0, 直接返回空字符串即可
		return ""
	}

	ss := make([]string, len(nums)) // 1. int类型的数组转化为string类型的数组：for循环
	for i := 0; i < len(nums); i++ {
		ss[i] = strconv.Itoa(nums[i])
	}

	sort.Slice(ss, func(i, j int) bool { // 2. 关键：对string数组进行排序
		return ss[i]+ss[j] < ss[j]+ss[i]
	})

	return strings.Join(ss, "") // 3. String[]数组转化为String类型
}
